% IN:
%  indeks_robota - numer robota
%  indeks_korytarza - numer korytarza wg definicji w serwer.korytarze
%  wjazd_korytarza - 1: wjazd zachodni, 0: wjazd wschodni
%  pozycja_w_kolejce - pozycja na ktorej robot znajduje sie w kolejce
% OUT:
%  pozycja, ktora robot powinien zajac oczekujac w kolejce
function ret = miejsce_w_kolejce(indeks_robota, pozycja_w_kolejce)
    global mapa;
    global roboty;
    global serwer_ob;

    % pozycja przed wjazdem do korytarza
    indeks_korytarza = roboty(indeks_robota).indeks_korytarza;
    
    modyfikator_x=0;
    modyfikator_y=0;
    odstep=0;
    
    % kolejkowanie do korytarza
    if(indeks_korytarza>0)
        
        % wjazd zachodni lub wschodni
        wjazd_korytarza = roboty(indeks_robota).pozycja(1) < serwer_ob.korytarze(indeks_korytarza,4).x;

        docelowe_pole = wjazd_do_korytarza(indeks_korytarza,wjazd_korytarza);

        % kolejka do zachodniego wjazdu korytarza?
        if(docelowe_pole(1)==2 || docelowe_pole(1)==12)
            kierunek_kolejki=1; % kolejka tworzona w dol
        else
            kierunek_kolejki=-1; % kolejka tworzona do gory
        end;

        % pozycja musi byc zmodyfikowana o ilosc robotow ktore sa juz w
        % kolejce
        if(pozycja_w_kolejce>1) 

            % ilosc pol jakie kolejka moze zajac zanim bedzie musiala
            % zakrecic
            if(docelowe_pole(2)==6 || docelowe_pole(2)==16)
                dlugosc_bez_skretu = 5;
            else
                dlugosc_bez_skretu = 2;
            end;

            modyfikator_y = kierunek_kolejki*min(pozycja_w_kolejce-1,dlugosc_bez_skretu);

            % przesuniecie, aby nie blokowac wjazdu do sasiednich
            % korytarzy
            tmp=docelowe_pole(2)+modyfikator_y;
            if(tmp==5 || tmp==8 || tmp==15 || tmp==18)
                odstep=1;
            end;

            % pozycja x za zakretem
            if(pozycja_w_kolejce-1+odstep>dlugosc_bez_skretu)
                modyfikator_x = kierunek_kolejki*(pozycja_w_kolejce-1+odstep-dlugosc_bez_skretu);
            end;
        end;

        ret = docelowe_pole + [modyfikator_x, modyfikator_y+odstep*kierunek_kolejki];

    else % kolejkowanie do kasy
        indeks_kasy = roboty(indeks_robota).numer_kasy;
        docelowe_pole = serwer_ob.kasy(indeks_kasy,:);
        
        if(pozycja_w_kolejce>1)
            
            % ilosc pol jakie kolejka moze zajac zanim bedzie musiala
            % zakrecic
            dlugosc_bez_skretu = docelowe_pole(1) - 1;

            modyfikator_x = -min(pozycja_w_kolejce-1,dlugosc_bez_skretu);

            % przesuniecie, aby nie blokowac wjazdu do sasiednich kas
            tmp = docelowe_pole(1)+modyfikator_x;
            if(tmp==4 || tmp==9 || tmp==14 || tmp==19)
                odstep=1;
            end;

            % pozycja y za zakretem
            if(pozycja_w_kolejce-1+odstep > dlugosc_bez_skretu)
                modyfikator_y = -(pozycja_w_kolejce-1+odstep-dlugosc_bez_skretu);
            end;
        
        end;
        
        ret = docelowe_pole + [modyfikator_x-odstep, modyfikator_y];
    end;
    
    if(mapa(ret(1),ret(2))~=0 && mapa(ret(1),ret(2))~=indeks_robota)
        % jesli miejsce docelowe bedzie zajete, proba umiejscowienia robota
        % tak jakby byl dalej w kolejce (glownie wykorzystywane w
        % przypadku, gdy dwie niezalezne kolejki beda sie przeplatac)
        ret = miejsce_w_kolejce(indeks_robota, pozycja_w_kolejce+1);
    end;
